home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Tools - Objects / Virtual User 1.0 / Example Libraries / StringsLib.vu < prev    next >
Text File  |  1991-01-25  |  4KB  |  116 lines

  1. #
  2. #    File:        StringsLibrary.vu
  3. #
  4. #    Contains:    Task defintions to convert numbers into strings and strings into numbers.
  5. #                The main tasks are:
  6. #                NumToStr(number) - this task takes in a number and converts it into a
  7. #                string. If the argument passed in is not a number undefined is returned.
  8. #                
  9. #                StrToNum(str, start_index := 1, end_index := -1) - this task takes in 
  10. #                a string and converts it into an integer, if possible.
  11. #                You can pass a start and end indices into a string in which a  
  12. #                number is embedded. This task deals with both positive and negative numbers.
  13. #                It returns MaxNum (32767) or MinNum (-32767) in error(overflow) conditions.
  14. #                It deals with cases such as "+123" and "-462" as well as unsigned ones like "981".
  15. #                If the argument passed in is not a string undefined is returned.
  16. #                
  17. #
  18. #    Written by:    P Nagarajan
  19. #
  20. #    Copyright:    © 1990 by Apple Computer, Inc., all rights reserved.
  21. #
  22. #    Change History:
  23. #
  24. #        7/16/90       naga         added header 
  25. #
  26. #    To Do:
  27. #
  28.  
  29. task NumToStr(number)
  30. begin
  31.     if (typeOf(number) <> "integer")
  32.          return undefined;
  33.     return "{number}";
  34. end;#NumToStr
  35.  
  36.  
  37. #the following task takes in a string and converts it into an integer
  38. #if possible. You can pass a start and end indices into a string in which a  
  39. #number is embedded. This task deals with both positive and negative numbers.
  40. #It returns MaxNum or MinNum values in error(overflow) conditions.
  41. #deals with cases such as "+123" and "-462" as well as "981".
  42.  
  43. task StrToNum(str, start_index := 1, end_index := -1)
  44. begin
  45.     if (typeOf(str) <> "string") return undefined;
  46.     MaxNum := 32767; MinNum := -32767; #may be these should be global
  47.     if (end_index = -1) end_index := card(str);
  48.     if (str[start_index] = '-') 
  49.     begin
  50.         is_negative := true;
  51.         start_index := start_index + 1;
  52.     end;#check if a negative number
  53.     else if (str[start_index] = '+') 
  54.     begin
  55.         start_index := start_index + 1;
  56.     end;#check if a positive sign present
  57.     if (end_index-start_index) > 4 
  58.     begin
  59.         if is_negative return MinNum;
  60.         else return MaxNum;
  61.     end;#error case out of size
  62.     num := form_positive_integer(str, start_index, end_index);
  63.     if (num = -1) 
  64.         if is_negative return MinNum;
  65.         else return MaxNum; #error condition
  66.     if is_negative return num*(-1);
  67.     else return num;
  68. end; #form an integer from a string
  69.  
  70. #the following task takes in a string and converts it into a positive integer
  71. #if possible. You can pass a start & end indices into a string in which a number 
  72. #is embedded. The string should not be contain more digits than the maximum number
  73. #allowed in VU (ie., 32767)
  74. task form_positive_integer(str, start_index := 1, end_index := -1)
  75. begin
  76.     num := 0;
  77.     if (end_index = -1) end_index := card(str);
  78.     for i:= start_index to end_index
  79.     begin
  80.         digit := char_to_digit(str[i]); 
  81.         if (digit = -1) return -1; #error condition
  82.         else if (num > 3276) return -1; #overflow condition
  83.         else if (num = 3276) and (digit > 7) return -1; #overflow condition
  84.         num := num*10 + digit;
  85.     end;#for each digit
  86.     return num;
  87. end;
  88.  
  89. #the following task converts a character to its equivalent numeric digit
  90. #if a non-numeric character is passed as the parameter this task returns -1
  91. task char_to_digit(character)
  92. begin
  93.     if (character = '0')
  94.         return (0);
  95.     else if (character = '1')
  96.         return(1);
  97.     else if (character = '2')
  98.         return(2);
  99.     else if (character = '3')
  100.         return(3);
  101.     else if (character = '4')
  102.         return(4);
  103.     else if (character = '5')
  104.         return(5);
  105.     else if (character = '6')
  106.         return(6);
  107.     else if (character = '7')
  108.         return(7);
  109.     else if (character = '8')
  110.         return(8);
  111.     else if (character = '9')
  112.         return(9);
  113.     else return (-1); #error condition
  114. end;
  115.  
  116.